<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MuPDFCore: MuPDFCore/MuPDFMultiThreadedPageRenderer.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="Doxy.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectlogo"><img alt="Logo" src="icon.svg"/></td>
  <td id="projectalign">
   <div id="projectname">MuPDFCore<span id="projectnumber">&#160;1.6.0</span>
   </div>
   <div id="projectbrief">Multiplatform .NET bindings for MuPDF</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle"><div class="title">MuPDFMultiThreadedPageRenderer.cs</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment">    MuPDFCore - A set of multiplatform .NET Core bindings for MuPDF.</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment">    Copyright (C) 2020  Giorgio Bianchini</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"></span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment">    This program is free software: you can redistribute it and/or modify</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment">    it under the terms of the GNU Affero General Public License as</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment">    published by the Free Software Foundation, version 3.</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"></span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment">    This program is distributed in the hope that it will be useful,</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment">    GNU Affero General Public License for more details.</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"></span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment">    You should have received a copy of the GNU Affero General Public License</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment">    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment">*/</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="keyword">using </span>System;</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="keyword">using </span>System.Collections.Generic;</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="keyword">using </span>System.Linq;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="keyword">using </span>System.Runtime.InteropServices;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span><span class="keyword">using </span>System.Threading;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespace_mu_p_d_f_core.html">MuPDFCore</a></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span>{<span class="comment"></span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="comment">    /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="comment">    /// A reusable thread to render part of an image.</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="comment">    /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="comment"></span>    <span class="keyword">internal</span> <span class="keyword">class </span>RenderingThread : IDisposable</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>    {<span class="comment"></span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="comment">        /// A class to hold the data used internally by the rendering thread.</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keyword">class </span>RenderData</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>        {</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>            <span class="keyword">public</span> IntPtr Context;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>            <span class="keyword">public</span> MuPDFDisplayList DisplayList;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>            <span class="keyword">public</span> Rectangle Region;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>            <span class="keyword">public</span> <span class="keywordtype">float</span> Zoom;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>            <span class="keyword">public</span> IntPtr PixelStorage;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>            <span class="keyword">public</span> Rectangle PageBounds;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>            <span class="keyword">public</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a> PixelFormat;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>            <span class="keyword">public</span> <span class="keywordtype">bool</span> ClipToPageBounds;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>        }</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span><span class="comment"></span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="comment">        /// A lock object to prevent race conditions.</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="comment"></span>        <span class="keyword">private</span> readonly <span class="keywordtype">object</span> RenderDataLock;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="comment"></span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span><span class="comment">        /// The data used internally by the rendering thread.</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="comment"></span>        <span class="keyword">private</span> readonly RenderData CurrentRenderData;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span><span class="comment"></span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span><span class="comment">        /// The actual thread that does the rendering.</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span><span class="comment"></span>        <span class="keyword">private</span> readonly Thread Thread;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span><span class="comment"></span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that is set by the &lt;see cref=&quot;Thread&quot;/&gt; when it finished rendering.</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle SignalFromThread;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span><span class="comment"></span> </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that signals to the &lt;see cref=&quot;Thread&quot;/&gt; that it should start rendering.</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle SignalToThread;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span><span class="comment"></span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that signals that the object is being disposed and all activity should cease.</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle DisposeSignal;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span><span class="comment"></span> </div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span><span class="comment">        /// A pointer to a &lt;see cref=&quot;Cookie&quot;/&gt; object that can be used to monitor the progress of the rendering or to abort it.</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span><span class="comment"></span>        <span class="keyword">private</span> readonly IntPtr Cookie;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span><span class="comment"></span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="comment">        /// Performs the actual rendering.</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderAction()</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>        {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>            <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a> result = (<a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>)NativeMethods.RenderSubDisplayList(<span class="keyword">this</span>.CurrentRenderData.Context, <span class="keyword">this</span>.CurrentRenderData.DisplayList.NativeDisplayList, <span class="keyword">this</span>.CurrentRenderData.Region.X0, <span class="keyword">this</span>.CurrentRenderData.Region.Y0, <span class="keyword">this</span>.CurrentRenderData.Region.X1, <span class="keyword">this</span>.CurrentRenderData.Region.Y1, <span class="keyword">this</span>.CurrentRenderData.Zoom, (<span class="keywordtype">int</span>)this.CurrentRenderData.PixelFormat, this.CurrentRenderData.PixelStorage, Cookie);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>            <span class="keywordflow">switch</span> (result)</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>            {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>                <span class="keywordflow">case</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>.EXIT_SUCCESS:</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>                <span class="keywordflow">case</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>.ERR_CANNOT_RENDER:</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>                    <span class="keywordflow">throw</span> <span class="keyword">new</span> MuPDFException(<span class="stringliteral">&quot;Cannot render page&quot;</span>, result);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>                <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>                    <span class="keywordflow">throw</span> <span class="keyword">new</span> MuPDFException(<span class="stringliteral">&quot;Unknown error&quot;</span>, result);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>            }</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>            RoundedRectangle roundedRegion = this.CurrentRenderData.Region.Round(this.CurrentRenderData.Zoom);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>            RoundedSize roundedSize = <span class="keyword">new</span> RoundedSize(roundedRegion.Width, roundedRegion.Height);</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>            <span class="keywordflow">if</span> (this.CurrentRenderData.PixelFormat == <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a>.RGBA || <span class="keyword">this</span>.CurrentRenderData.PixelFormat == <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a>.BGRA)</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>            {</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>                Utils.UnpremultiplyAlpha(this.CurrentRenderData.PixelStorage, roundedSize);</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>            }</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>            <span class="keywordflow">if</span> (this.CurrentRenderData.ClipToPageBounds &amp;&amp; !<span class="keyword">this</span>.CurrentRenderData.PageBounds.Contains(<span class="keyword">this</span>.CurrentRenderData.DisplayList.Bounds.Intersect(<span class="keyword">this</span>.CurrentRenderData.Region)))</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>            {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>                Utils.ClipImage(this.CurrentRenderData.PixelStorage, roundedSize, <span class="keyword">this</span>.CurrentRenderData.Region, <span class="keyword">this</span>.CurrentRenderData.PageBounds, <span class="keyword">this</span>.CurrentRenderData.PixelFormat);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>            }</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>        }</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span><span class="comment"></span> </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span><span class="comment">        /// Create a new &lt;see cref=&quot;RenderingThread&quot;/&gt; instance.</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span><span class="comment"></span>        <span class="keyword">public</span> RenderingThread()</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>        {</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>            <span class="comment">//Initialize fields</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>            SignalFromThread = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>            SignalToThread = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>            DisposeSignal = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>            CurrentRenderData = <span class="keyword">new</span> RenderData();</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>            RenderDataLock = <span class="keyword">new</span> object();</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>            <span class="comment">//Allocate unmanaged memory to hold the cookie.</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>            Cookie = Marshal.AllocHGlobal(Marshal.SizeOf&lt;<a class="code hl_namespace" href="namespace_mu_p_d_f_core.html">MuPDFCore</a>.<a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_cookie.html">Cookie</a>&gt;());</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>            <span class="comment">//Initialise the rendering thread.</span></div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>            this.Thread = <span class="keyword">new</span> Thread(() =&gt;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>            {</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>                EventWaitHandle[] handles = <span class="keyword">new</span> EventWaitHandle[] { SignalToThread, DisposeSignal };</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>                <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>                {</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>                    <span class="keywordtype">int</span> handle = EventWaitHandle.WaitAny(handles);</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>                    <span class="keywordflow">if</span> (handle == 0)</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>                    {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>                        SignalToThread.Reset();</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>                        lock (RenderDataLock)</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>                        {</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>                            this.RenderAction();</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>                        }</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>                        SignalFromThread.Set();</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>                    }</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>                    {</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>                        SignalFromThread.Set();</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>                        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>                    }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>                }</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>            });</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>            <span class="comment">//Start the rendering thread.</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>            this.Thread.Start();</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>        }</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span><span class="comment"></span> </div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span><span class="comment">        /// Start rendering a region of a display list to the specified destination.</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span><span class="comment">        /// &lt;param name=&quot;context&quot;&gt;The rendering context.&lt;/param&gt;</span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span><span class="comment">        /// &lt;param name=&quot;displayList&quot;&gt;The native display list that should be rendered.&lt;/param&gt;</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span><span class="comment">        /// &lt;param name=&quot;region&quot;&gt;The region that should be rendered.&lt;/param&gt;</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span><span class="comment">        /// &lt;param name=&quot;zoom&quot;&gt;The scale at which the region will be rendered. This will determine the size in pixel of the image.&lt;/param&gt;</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span><span class="comment">        /// &lt;param name=&quot;pixelStorage&quot;&gt;The address of the buffer where the pixel data will be written. There must be enough space available to write the values for all the pixels, otherwise this will fail catastrophically!&lt;/param&gt;</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span><span class="comment">        /// &lt;param name=&quot;pixelFormat&quot;&gt;The format of the pixel data.&lt;/param&gt;</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span><span class="comment">        /// &lt;param name=&quot;pageBounds&quot;&gt;The bounds of the page being rendererd.&lt;/param&gt;</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span><span class="comment">        /// &lt;param name=&quot;clipToPageBounds&quot;&gt;A boolean value indicating whether the rendered image should be clipped to the original page&#39;s bounds. This can be relevant if the page has been &quot;cropped&quot; by altering its mediabox, but otherwise leaving the contents untouched.&lt;/param&gt;</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> Render(IntPtr context, MuPDFDisplayList displayList, Rectangle region, <span class="keywordtype">float</span> zoom, IntPtr pixelStorage, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a> pixelFormat, Rectangle pageBounds, <span class="keywordtype">bool</span> clipToPageBounds)</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>        {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>            lock (RenderDataLock)</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>            {</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>                <span class="comment">//Reset the cookie.</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>                unsafe</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>                {</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>                    Cookie* cookie = (Cookie*)Cookie;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>                    cookie-&gt;abort = 0;</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>                    cookie-&gt;errors = 0;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>                    cookie-&gt;incomplete = 0;</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>                    cookie-&gt;progress = 0;</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>                    cookie-&gt;progress_max = 0;</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>                }</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>                <span class="comment">//Set up all the rendering data.</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>                CurrentRenderData.Context = context;</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>                CurrentRenderData.DisplayList = displayList;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>                CurrentRenderData.Region = region;</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>                CurrentRenderData.Zoom = zoom;</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>                CurrentRenderData.PixelStorage = pixelStorage;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>                CurrentRenderData.PixelFormat = pixelFormat;</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>                CurrentRenderData.PageBounds = pageBounds;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>                CurrentRenderData.ClipToPageBounds = clipToPageBounds;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>                SignalToThread.Set();</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>            }</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>        }</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span><span class="comment"></span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span><span class="comment">        /// Wait until the current rendering operation finishes.</span></div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> WaitForRendering()</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>        {</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>            EventWaitHandle[] handles = <span class="keyword">new</span> EventWaitHandle[] { SignalFromThread, DisposeSignal };</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>            <span class="keywordtype">int</span> result = EventWaitHandle.WaitAny(handles);</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>            <span class="keywordflow">if</span> (result == 0)</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>            {</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>                SignalFromThread.Reset();</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>            }</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>        }</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span><span class="comment"></span> </div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span><span class="comment">        /// Abort the current rendering operation.</span></div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> AbortRendering()</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>        {</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>            lock (RenderDataLock)</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>            {</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>                unsafe</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>                {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>                    Cookie* cookie = (Cookie*)Cookie;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>                    cookie-&gt;abort = 1;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>                }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>            }</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>        }</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span><span class="comment"></span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span><span class="comment">        /// Get the progress of the current rendering operation.</span></div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span><span class="comment">        /// &lt;returns&gt;A &lt;see cref=&quot;RenderProgress.ThreadRenderProgress&quot;/&gt; object containing the progress of the current rendering operation.&lt;/returns&gt;</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span><span class="comment"></span>        <span class="keyword">public</span> RenderProgress.ThreadRenderProgress GetProgress()</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>        {</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>            <span class="keywordtype">int</span> progress;</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>            ulong maxProgress;</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span> </div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>            unsafe</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>            {</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>                Cookie* cookie = (Cookie*)Cookie;</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span> </div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>                progress = cookie-&gt;progress;</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>                maxProgress = cookie-&gt;progress_max;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>            }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>            <span class="keywordflow">return</span> <span class="keyword">new</span> RenderProgress.ThreadRenderProgress(progress, maxProgress);</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>        }</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span> </div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> disposedValue;</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span> </div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>        <span class="keyword">protected</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>        {</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>            <span class="keywordflow">if</span> (!disposedValue)</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>            {</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>                <span class="keywordflow">if</span> (disposing)</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>                {</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>                    DisposeSignal.Set();</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>                    Thread.Join();</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>                }</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span> </div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>                Marshal.FreeHGlobal(Cookie);</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>                disposedValue = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>            }</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>        }</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>        <span class="keyword">public</span> <span class="keywordtype">void</span> Dispose()</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>        {</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>            Dispose(disposing: <span class="keyword">true</span>);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>            GC.SuppressFinalize(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>        }</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>    }</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span><span class="comment"></span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span><span class="comment">    /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span><span class="comment">    /// A class that holds the necessary resources to render a page of a MuPDF document using multiple threads.</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span><span class="comment">    /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html">  276</a></span><span class="comment"></span>    <span class="keyword">public</span> <span class="keyword">class </span><a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html">MuPDFMultiThreadedPageRenderer</a> : IDisposable</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span>    {<span class="comment"></span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span><span class="comment">        /// The display list that is rendered by this renderer.</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span><span class="comment"></span>        <span class="keyword">private</span> readonly MuPDFDisplayList DisplayList;</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span><span class="comment"></span> </div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span><span class="comment">        /// The cloned contexts that are used by the &lt;see cref=&quot;RenderingThreads&quot;/&gt; to render the display list.</span></div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span><span class="comment"></span>        <span class="keyword">private</span> readonly <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a>[] Contexts;</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span><span class="comment"></span> </div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span><span class="comment">        /// The &lt;see cref=&quot;RenderingThreads&quot;/&gt; that are in charge of the actual rendering.</span></div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span><span class="comment"></span>        <span class="keyword">private</span> readonly RenderingThread[] RenderingThreads;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span><span class="comment"></span> </div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span><span class="comment">        /// The bounds of the page being rendered.</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span><span class="comment"></span>        <span class="keyword">private</span> readonly <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> PageBounds;</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span><span class="comment"></span> </div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span><span class="comment">        /// Whether the rendered images should be clipped to the bounds of the page being rendered.</span></div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span><span class="comment"></span>        <span class="keyword">private</span> readonly <span class="keywordtype">bool</span> ClipToPageBounds;</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span><span class="comment"></span> </div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span><span class="comment">        /// The number of threads that are used to render the image.</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">  306</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">ThreadCount</a> { <span class="keyword">get</span>; }</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span><span class="comment"></span> </div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span><span class="comment">        /// If the document is an image, the horizontal resolution of the image. Otherwise, 72.</span></div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span><span class="comment"></span>        <span class="keyword">internal</span> <span class="keywordtype">double</span> ImageXRes = <span class="keywordtype">double</span>.NaN;</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span><span class="comment"></span> </div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span><span class="comment">        /// If the document is an image, the vertical resolution of the image. Otherwise, 72.</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span><span class="comment"></span>        <span class="keyword">internal</span> <span class="keywordtype">double</span> ImageYRes = <span class="keywordtype">double</span>.NaN;</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span><span class="comment"></span> </div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span><span class="comment">        /// Create a new &lt;see cref=&quot;MuPDFMultiThreadedPageRenderer&quot;/&gt; from a specified display list using the specified number of threads.</span></div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span><span class="comment">        /// &lt;param name=&quot;context&quot;&gt;The context that owns the document from which the display list was extracted.&lt;/param&gt;</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span><span class="comment">        /// &lt;param name=&quot;displayList&quot;&gt;The display list to render.&lt;/param&gt;</span></div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. This must be factorisable using only powers of 2, 3, 5 or 7. Otherwise, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span><span class="comment">        /// &lt;param name=&quot;pageBounds&quot;&gt;The bounds of the page being rendererd.&lt;/param&gt;</span></div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span><span class="comment">        /// &lt;param name=&quot;clipToPageBounds&quot;&gt;A boolean value indicating whether the rendered image should be clipped to the original page&#39;s bounds. This can be relevant if the page has been &quot;cropped&quot; by altering its mediabox, but otherwise leaving the contents untouched.&lt;/param&gt;</span></div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span><span class="comment">        /// &lt;param name=&quot;imageXRes&quot;&gt;If the document is an image, the horizontal resolution of the image. Otherwise, 72.&lt;/param&gt;</span></div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span><span class="comment">        /// &lt;param name=&quot;imageYRes&quot;&gt;If the document is an image, the vertical resolution of the image. Otherwise, 72.&lt;/param&gt;</span></div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span><span class="comment"></span>        <span class="keyword">internal</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html">MuPDFMultiThreadedPageRenderer</a>(<a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a> context, MuPDFDisplayList displayList, <span class="keywordtype">int</span> threadCount, <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> pageBounds, <span class="keywordtype">bool</span> clipToPageBounds, <span class="keywordtype">double</span> imageXRes, <span class="keywordtype">double</span> imageYRes)</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span>        {</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span>            threadCount = Utils.GetAcceptableNumber(threadCount);</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span> </div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span>            this.ThreadCount = threadCount;</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span>            this.DisplayList = displayList;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span>            this.PageBounds = pageBounds;</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span>            this.ClipToPageBounds = clipToPageBounds;</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span> </div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>            this.ImageXRes = imageXRes;</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>            this.ImageYRes = imageYRes;</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span> </div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span>            IntPtr[] contexts = <span class="keyword">new</span> IntPtr[threadCount];</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span>            GCHandle contextsHandle = GCHandle.Alloc(contexts, GCHandleType.Pinned);</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>            <span class="keywordflow">try</span></div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>            {</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span>                <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a> result = (<a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>)NativeMethods.CloneContext(context.NativeContext, threadCount, contextsHandle.AddrOfPinnedObject());</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span> </div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span>                <span class="keywordflow">switch</span> (result)</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span>                {</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span>                    <span class="keywordflow">case</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>.EXIT_SUCCESS:</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span>                        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span>                    <span class="keywordflow">case</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>.ERR_CANNOT_INIT_MUTEX:</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span>                        <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_exception.html">MuPDFException</a>(<span class="stringliteral">&quot;Cannot initalize mutex objects&quot;</span>, result);</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span>                    <span class="keywordflow">case</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>.ERR_CANNOT_CREATE_CONTEXT:</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span>                        <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_exception.html">MuPDFException</a>(<span class="stringliteral">&quot;Cannot create master context&quot;</span>, result);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span>                    <span class="keywordflow">case</span> <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">ExitCodes</a>.ERR_CANNOT_CLONE_CONTEXT:</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span>                        <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_exception.html">MuPDFException</a>(<span class="stringliteral">&quot;Cannot create context clones&quot;</span>, result);</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span>                    <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>                        <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_exception.html">MuPDFException</a>(<span class="stringliteral">&quot;Unknown error&quot;</span>, result);</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span>                }</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span> </div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span>                Contexts = <span class="keyword">new</span> MuPDFContext[threadCount];</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>                RenderingThreads = <span class="keyword">new</span> RenderingThread[threadCount];</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span>                <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; threadCount; i++)</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>                {</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span>                    Contexts[i] = <span class="keyword">new</span> MuPDFContext(contexts[i]);</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span>                    RenderingThreads[i] = <span class="keyword">new</span> RenderingThread();</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span>                }</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>            }</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span>            <span class="keywordflow">finally</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span>            {</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span>                contextsHandle.Free();</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span>            }</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span>        }</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span><span class="comment"></span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span><span class="comment">        /// Render the specified region to an image of the specified size, split in a number of tiles equal to the number of threads used by this &lt;see cref=&quot;MuPDFMultiThreadedPageRenderer&quot;/&gt;, without marshaling. This method will not return until all the rendering threads have finished.</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span><span class="comment">        /// &lt;param name=&quot;targetSize&quot;&gt;The total size of the image that should be rendered.&lt;/param&gt;</span></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span><span class="comment">        /// &lt;param name=&quot;region&quot;&gt;The region in page units that should be rendered.&lt;/param&gt;</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span><span class="comment">        /// &lt;param name=&quot;destinations&quot;&gt;An array containing the addresses of the buffers where the rendered tiles will be written. There must be enough space available in each buffer to write the values for all the pixels of the tile, otherwise this will fail catastrophically!</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span><span class="comment">        /// As long as the &lt;paramref name=&quot;targetSize&quot;/&gt; is the same, the size in pixel of the tiles is guaranteed to also be the same.&lt;/param&gt;</span></div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span><span class="comment">        /// &lt;param name=&quot;pixelFormat&quot;&gt;The format of the pixel data.&lt;/param&gt;</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#afb748f194d7f6983f68c475b53943da5">  383</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#afb748f194d7f6983f68c475b53943da5">Render</a>(<a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_size.html">RoundedSize</a> targetSize, <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> region, IntPtr[] destinations, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a> pixelFormat)</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span>        {</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span>            <span class="keywordflow">if</span> (destinations.Length != Contexts.Length)</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno">  386</span>            {</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span>                <span class="keywordflow">throw</span> <span class="keyword">new</span> ArgumentOutOfRangeException(nameof(destinations), destinations.Length, <span class="stringliteral">&quot;The number of destinations must be equal to the number of rendering threads!&quot;</span>);</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span>            }</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span> </div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">RoundedRectangle</a>[] targets = targetSize.<a class="code hl_function" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a8703250753e43f5556408d3074e695bb">Split</a>(destinations.Length);</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span> </div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span>            <span class="keywordtype">float</span> zoomX = targetSize.Width / region.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">Width</a>;</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span>            <span class="keywordtype">float</span> zoomY = targetSize.Height / region.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">Height</a>;</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno">  394</span> </div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span>            <span class="keywordtype">float</span> zoom = (float)Math.Sqrt(zoomX * zoomY);</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno">  396</span> </div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> actualPageArea = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(region.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">X0</a>, region.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">Y0</a>, region.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">X0</a> + targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a5e5954ae76c12cb8a36572be2354aa4b">Width</a> / zoom, region.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">Y0</a> + targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a0c85da598b26dbd5bb66e60af22190de">Height</a> / zoom);</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span> </div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>[] origins = actualPageArea.<a class="code hl_function" href="struct_mu_p_d_f_core_1_1_rectangle.html#adbdaf8ee995b42c7c710d32c74f65f5f">Split</a>(destinations.Length);</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span> </div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno">  401</span>            <span class="comment">//Make sure that each tile has the expected size in pixel, rounding errors notwithstanding.</span></div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno">  402</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; origins.Length; i++)</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno">  403</span>            {</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno">  404</span>                <span class="keywordtype">int</span> countBlanks = 0;</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span>                <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">RoundedRectangle</a> roundedOrigin = origins[i].<a class="code hl_function" href="struct_mu_p_d_f_core_1_1_rectangle.html#a27cf4d4747a8677f8103746ee3386595">Round</a>(zoom);</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno">  406</span>                <span class="keywordflow">while</span> (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> != targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> || roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> != targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a>)</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span>                {</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno">  408</span>                    <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">RoundedRectangle</a> oldRoundedOrigin = roundedOrigin;</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno">  409</span> </div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno">  410</span>                    <span class="keywordflow">if</span> (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> &gt; targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a>)</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno">  411</span>                    {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno">  412</span>                        <span class="keywordflow">if</span> (origins[i].X0 &gt; actualPageArea.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">X0</a>)</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno">  413</span>                        {</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0 + 0.5 / zoom, origins[i].Y0, origins[i].X1, origins[i].Y1);</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno">  415</span>                        }</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span>                        <span class="keywordflow">else</span></div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno">  417</span>                        {</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno">  418</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0, origins[i].Y0, origins[i].X1 - 0.5 / zoom, origins[i].Y1);</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno">  419</span>                        }</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno">  420</span>                    }</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span>                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> &lt; targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a>)</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno">  422</span>                    {</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span>                        <span class="keywordflow">if</span> (origins[i].X1 &lt; actualPageArea.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a69c99f6aaf6cfa3ca52a9aab45fb06a0">X1</a>)</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span>                        {</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0, origins[i].Y0, origins[i].X1 + 0.5 / zoom, origins[i].Y1);</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span>                        }</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span>                        <span class="keywordflow">else</span></div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span>                        {</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno">  429</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0 - 0.5 / zoom, origins[i].Y0, origins[i].X1, origins[i].Y1);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno">  430</span>                        }</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span>                    }</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span> </div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span> </div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno">  434</span>                    <span class="keywordflow">if</span> (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> &gt; targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a>)</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span>                    {</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno">  436</span>                        <span class="keywordflow">if</span> (origins[i].Y0 &gt; actualPageArea.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">Y0</a>)</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno">  437</span>                        {</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno">  438</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0, origins[i].Y0 + 0.5 / zoom, origins[i].X1, origins[i].Y1);</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span>                        }</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span>                        <span class="keywordflow">else</span></div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span>                        {</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0, origins[i].Y0, origins[i].X1, origins[i].Y1 - 0.5 / zoom);</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>                        }</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span>                    }</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span>                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> &lt; targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a>)</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span>                    {</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span>                        <span class="keywordflow">if</span> (origins[i].X1 &lt; actualPageArea.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a69c99f6aaf6cfa3ca52a9aab45fb06a0">X1</a>)</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno">  448</span>                        {</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0, origins[i].Y0, origins[i].X1, origins[i].Y1 + 0.5 / zoom);</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>                        }</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span>                        <span class="keywordflow">else</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span>                        {</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span>                            origins[i] = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origins[i].X0, origins[i].Y0 - 0.5 / zoom, origins[i].X1, origins[i].Y1);</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span>                        }</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno">  455</span>                    }</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno">  456</span> </div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno">  457</span>                    roundedOrigin = origins[i].<a class="code hl_function" href="struct_mu_p_d_f_core_1_1_rectangle.html#a27cf4d4747a8677f8103746ee3386595">Round</a>(zoom);</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno">  458</span> </div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno">  459</span>                    <span class="keywordflow">if</span> (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> == oldRoundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> &amp;&amp; roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> == oldRoundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> &amp;&amp; (roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> != targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> || roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> != targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a>))</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno">  460</span>                    {</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span>                        countBlanks++;</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno">  462</span>                    }</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno">  463</span> </div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno">  464</span>                    <span class="keywordflow">if</span> (countBlanks &gt;= 100)</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno">  465</span>                    {</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno">  466</span>                        <span class="comment">//It seems that we can&#39;t coerce the expected size and the actual size to be the same. Give up.</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno">  467</span>                        <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno">  468</span>                    }</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>                }</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>            }</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span> </div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span>            <span class="comment">//Start each rendering thread.</span></div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; destinations.Length; i++)</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span>            {</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>                <span class="keywordtype">double</span> dzoom = zoom;</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span>                <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> origin = origins[i];</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span>                <span class="keywordflow">if</span> (this.ImageXRes != 72 || this.ImageYRes != 72)</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span>                {</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span>                    dzoom *= Math.Sqrt(this.ImageXRes * this.ImageYRes) / 72;</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>                    origin = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(origin.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">X0</a> * 72 / <span class="keyword">this</span>.ImageXRes, origin.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">Y0</a> * 72 / <span class="keyword">this</span>.ImageYRes, origin.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a69c99f6aaf6cfa3ca52a9aab45fb06a0">X1</a> * 72 / <span class="keyword">this</span>.ImageXRes, origin.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#aca202ae10d09cc9307a57e3c8f206bed">Y1</a> * 72 / <span class="keyword">this</span>.ImageYRes);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span>                }</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span> </div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span>                RenderingThreads[i].Render(Contexts[i].NativeContext, DisplayList, origin, (<span class="keywordtype">float</span>)dzoom, destinations[i], pixelFormat, this.PageBounds, ClipToPageBounds);</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno">  484</span>            }</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno">  485</span> </div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno">  486</span>            <span class="comment">//Wait until all the rendering threads have finished.</span></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; destinations.Length; i++)</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno">  488</span>            {</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno">  489</span>                RenderingThreads[i].WaitForRendering();</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno">  490</span>            }</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno">  491</span>        }</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno">  492</span><span class="comment"></span> </div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno">  493</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span><span class="comment">        /// Gets an element from a collection of &lt;see cref=&quot;System.Span{T}&quot;&gt;Span&lt;/see&gt;&amp;lt;&lt;see cref=&quot;byte&quot;/&gt;&amp;gt;</span></div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno">  495</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno">  496</span><span class="comment">        /// &lt;param name=&quot;index&quot;&gt;The index of the element to get.&lt;/param&gt;</span></div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno">  497</span><span class="comment">        /// &lt;returns&gt;An element from a collection of &lt;see cref=&quot;System.Span{T}&quot;&gt;Span&lt;/see&gt;&amp;lt;&lt;see cref=&quot;byte&quot;/&gt;&amp;gt;&lt;/returns&gt;</span></div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#aeb76562e49532298efc7964aa87283e2">  498</a></span><span class="comment"></span>        <span class="keyword">public</span> delegate Span&lt;byte&gt; <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#aeb76562e49532298efc7964aa87283e2">GetSpanItem</a>(<span class="keywordtype">int</span> index);</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno">  499</span><span class="comment"></span> </div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno">  500</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno">  501</span><span class="comment">        /// Render the specified region to an image of the specified size, split in a number of tiles equal to the number of threads used by this &lt;see cref=&quot;MuPDFMultiThreadedPageRenderer&quot;/&gt;, without marshaling. This method will not return until all the rendering threads have finished.</span></div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span><span class="comment">        /// Since creating an array of &lt;see cref=&quot;Span{T}&quot;/&gt; is not allowed, this method returns a delegate that accepts an integer parameter (representing the index of the span in the &quot;array&quot;) and returns the &lt;see cref=&quot;Span{T}&quot;/&gt; corresponding to that index.</span></div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno">  504</span><span class="comment">        /// &lt;param name=&quot;targetSize&quot;&gt;The total size of the image that should be rendered.&lt;/param&gt;</span></div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span><span class="comment">        /// &lt;param name=&quot;region&quot;&gt;The region in page units that should be rendered.&lt;/param&gt;</span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno">  506</span><span class="comment">        /// &lt;param name=&quot;disposables&quot;&gt;A collection of &lt;see cref=&quot;IDisposable&quot;/&gt;s that can be used to free the memory where the rendered tiles are stored. You should keep track of these and dispose them when you have finished working with the images.&lt;/param&gt;</span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno">  507</span><span class="comment">        /// &lt;param name=&quot;pixelFormat&quot;&gt;The format of the pixel data.&lt;/param&gt;</span></div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno">  508</span><span class="comment">        /// &lt;returns&gt;A delegate that accepts an integer parameter (representing the index of the span in the &quot;array&quot;) and returns the &lt;see cref=&quot;Span{T}&quot;/&gt; corresponding to that index.&lt;/returns&gt;</span></div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ae618aac7a0b15dd131d4f6637007b4f3">  509</a></span><span class="comment"></span>        <span class="keyword">public</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#aeb76562e49532298efc7964aa87283e2">GetSpanItem</a> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ae618aac7a0b15dd131d4f6637007b4f3">Render</a>(<a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_size.html">RoundedSize</a> targetSize, <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> region, out IDisposable[] disposables, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a> pixelFormat)</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno">  510</span>        {</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno">  511</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">RoundedRectangle</a>[] targets = targetSize.<a class="code hl_function" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a8703250753e43f5556408d3074e695bb">Split</a>(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">ThreadCount</a>);</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span> </div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno">  513</span>            IntPtr[] destinations = <span class="keyword">new</span> IntPtr[targets.Length];</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span>            disposables = <span class="keyword">new</span> IDisposable[targets.Length];</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span> </div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno">  516</span>            <span class="keywordtype">bool</span> hasAlpha = pixelFormat == PixelFormats.RGBA || pixelFormat == <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a>.BGRA;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno">  517</span> </div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span>            <span class="keywordtype">int</span>[] sizes = <span class="keyword">new</span> <span class="keywordtype">int</span>[destinations.Length];</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span> </div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno">  520</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; targets.Length; i++)</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span>            {</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span>                <span class="keywordtype">int</span> allocSize = targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a> * targets[i].<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a> * (hasAlpha ? 4 : 3);</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span> </div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno">  524</span>                sizes[i] = allocSize;</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span>                destinations[i] = Marshal.AllocHGlobal(allocSize);</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno">  526</span>                disposables[i] = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_disposable_int_ptr.html">DisposableIntPtr</a>(destinations[i], allocSize);</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno">  527</span>            }</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno">  528</span> </div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span>            this.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#afb748f194d7f6983f68c475b53943da5">Render</a>(targetSize, region, destinations, pixelFormat);</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span> </div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno">  531</span>            <span class="keywordflow">return</span> i =&gt;</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span>            {</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno">  533</span>                unsafe</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span>                {</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno">  535</span>                    <span class="keywordflow">return</span> <span class="keyword">new</span> Span&lt;byte&gt;((<span class="keywordtype">void</span>*)destinations[i], sizes[i]);</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span>                }</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>            };</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span>        }</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span><span class="comment"></span> </div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span><span class="comment">        /// Signal to the rendering threads that they should abort rendering as soon as possible.</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a05eca723202ae5ca1b535b8fe32ef405">  543</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a05eca723202ae5ca1b535b8fe32ef405">Abort</a>()</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span>        {</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span>            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; RenderingThreads.Length; i++)</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span>            {</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>                RenderingThreads[i].AbortRendering();</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>            }</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>        }</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span><span class="comment"></span> </div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span><span class="comment">        /// Get the current rendering progress of all the threads.</span></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span><span class="comment">        /// &lt;returns&gt;A &lt;see cref=&quot;RenderProgress&quot;/&gt; object containing the rendering progress of all the threads.&lt;/returns&gt;</span></div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ab3967195e249f10b89eadaeed551a409">  555</a></span><span class="comment"></span>        <span class="keyword">public</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_render_progress.html">RenderProgress</a> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ab3967195e249f10b89eadaeed551a409">GetProgress</a>()</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno">  556</span>        {</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno">  557</span>            <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_render_progress.html">RenderProgress</a>((from el in RenderingThreads select el.GetProgress()).ToArray());</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span>        }</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno">  559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> disposedValue;</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span><span class="comment"></span> </div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span><span class="comment">        ///&lt;inheritdoc/&gt;</span></div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span><span class="comment"></span>        <span class="keyword">protected</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span>        {</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>            <span class="keywordflow">if</span> (!disposedValue)</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span>            {</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span>                <span class="keywordflow">if</span> (disposing)</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>                {</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span>                    <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a05eca723202ae5ca1b535b8fe32ef405">Abort</a>();</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno">  570</span> </div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno">  571</span>                    <span class="keywordflow">if</span> (RenderingThreads != <span class="keyword">null</span>)</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno">  572</span>                    {</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno">  573</span>                        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; RenderingThreads.Length; i++)</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno">  574</span>                        {</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno">  575</span>                            RenderingThreads[i].Dispose();</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno">  576</span>                        }</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno">  577</span>                    }</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno">  578</span> </div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno">  579</span>                    <span class="keywordflow">if</span> (Contexts != <span class="keyword">null</span>)</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno">  580</span>                    {</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno">  581</span>                        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; Contexts.Length; i++)</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno">  582</span>                        {</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>                            Contexts[i].Dispose();</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno">  584</span>                        }</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span>                    }</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno">  586</span>                }</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span>                disposedValue = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span>            }</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span>        }</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span><span class="comment"></span> </div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span><span class="comment">        ///&lt;inheritdoc/&gt;</span></div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> Dispose()</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span>        {</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span>            Dispose(disposing: <span class="keyword">true</span>);</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>            GC.SuppressFinalize(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span>        }</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>    }</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>}</div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_disposable_int_ptr_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_disposable_int_ptr.html">MuPDFCore.DisposableIntPtr</a></div><div class="ttdoc">An IDisposable wrapper around an IntPtr that frees the allocated memory when it is disposed.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00406">MuPDF.cs:407</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_context_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFCore.MuPDFContext</a></div><div class="ttdoc">A wrapper around a MuPDF context object, which contains the exception stack and the resource cache st...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_context_8cs_source.html#l00025">MuPDFContext.cs:26</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_exception_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_exception.html">MuPDFCore.MuPDFException</a></div><div class="ttdoc">The exception that is thrown when a MuPDF operation fails.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00478">MuPDF.cs:479</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html">MuPDFCore.MuPDFMultiThreadedPageRenderer</a></div><div class="ttdoc">A class that holds the necessary resources to render a page of a MuPDF document using multiple thread...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00276">MuPDFMultiThreadedPageRenderer.cs:277</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_a05eca723202ae5ca1b535b8fe32ef405"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a05eca723202ae5ca1b535b8fe32ef405">MuPDFCore.MuPDFMultiThreadedPageRenderer.Abort</a></div><div class="ttdeci">void Abort()</div><div class="ttdoc">Signal to the rendering threads that they should abort rendering as soon as possible.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00543">MuPDFMultiThreadedPageRenderer.cs:543</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_a9f2e30c872e3b409af2333aede3503f7"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">MuPDFCore.MuPDFMultiThreadedPageRenderer.ThreadCount</a></div><div class="ttdeci">int ThreadCount</div><div class="ttdoc">The number of threads that are used to render the image.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00306">MuPDFMultiThreadedPageRenderer.cs:306</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_ab3967195e249f10b89eadaeed551a409"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ab3967195e249f10b89eadaeed551a409">MuPDFCore.MuPDFMultiThreadedPageRenderer.GetProgress</a></div><div class="ttdeci">RenderProgress GetProgress()</div><div class="ttdoc">Get the current rendering progress of all the threads.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00555">MuPDFMultiThreadedPageRenderer.cs:555</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_ae618aac7a0b15dd131d4f6637007b4f3"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ae618aac7a0b15dd131d4f6637007b4f3">MuPDFCore.MuPDFMultiThreadedPageRenderer.Render</a></div><div class="ttdeci">GetSpanItem Render(RoundedSize targetSize, Rectangle region, out IDisposable[] disposables, PixelFormats pixelFormat)</div><div class="ttdoc">Render the specified region to an image of the specified size, split in a number of tiles equal to th...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00509">MuPDFMultiThreadedPageRenderer.cs:509</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_aeb76562e49532298efc7964aa87283e2"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#aeb76562e49532298efc7964aa87283e2">MuPDFCore.MuPDFMultiThreadedPageRenderer.GetSpanItem</a></div><div class="ttdeci">delegate Span&lt; byte &gt; GetSpanItem(int index)</div><div class="ttdoc">Gets an element from a collection of Span&lt;byte&gt;</div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_afb748f194d7f6983f68c475b53943da5"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#afb748f194d7f6983f68c475b53943da5">MuPDFCore.MuPDFMultiThreadedPageRenderer.Render</a></div><div class="ttdeci">void Render(RoundedSize targetSize, Rectangle region, IntPtr[] destinations, PixelFormats pixelFormat)</div><div class="ttdoc">Render the specified region to an image of the specified size, split in a number of tiles equal to th...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00383">MuPDFMultiThreadedPageRenderer.cs:383</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_render_progress_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_render_progress.html">MuPDFCore.RenderProgress</a></div><div class="ttdoc">Holds a summary of the progress of the current rendering operation.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00368">MuPDF.cs:369</a></div></div>
<div class="ttc" id="anamespace_mu_p_d_f_core_html"><div class="ttname"><a href="namespace_mu_p_d_f_core.html">MuPDFCore</a></div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00026">MuPDF.cs:27</a></div></div>
<div class="ttc" id="anamespace_mu_p_d_f_core_html_aa6919d62a772f0334777d47f9c2d6c59"><div class="ttname"><a href="namespace_mu_p_d_f_core.html#aa6919d62a772f0334777d47f9c2d6c59">MuPDFCore.ExitCodes</a></div><div class="ttdeci">ExitCodes</div><div class="ttdoc">Exit codes returned by native methods describing various errors that can occur.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00031">MuPDF.cs:32</a></div></div>
<div class="ttc" id="anamespace_mu_p_d_f_core_html_ade1eb4d4f9c9c8a66bde9152ea9e41bb"><div class="ttname"><a href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">MuPDFCore.PixelFormats</a></div><div class="ttdeci">PixelFormats</div><div class="ttdoc">Pixel formats supported by the library.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00235">MuPDF.cs:236</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_cookie_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_cookie.html">MuPDFCore.Cookie</a></div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00356">MuPDF.cs:357</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html">MuPDFCore.Rectangle</a></div><div class="ttdoc">Represents a rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00326">Rectangles.cs:327</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a27cf4d4747a8677f8103746ee3386595"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a27cf4d4747a8677f8103746ee3386595">MuPDFCore.Rectangle.Round</a></div><div class="ttdeci">RoundedRectangle Round()</div><div class="ttdoc">Round the rectangle's coordinates to the closest integers.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00392">Rectangles.cs:392</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a4ea4052094e051b974b7ca1bc9346655"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">MuPDFCore.Rectangle.Width</a></div><div class="ttdeci">float Width</div><div class="ttdoc">The width of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00351">Rectangles.cs:351</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a5a06dd7d57268bdf22b5ce741b9dbf4e"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">MuPDFCore.Rectangle.Height</a></div><div class="ttdeci">float Height</div><div class="ttdoc">The height of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00356">Rectangles.cs:356</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a5e3466975ea3adbd9ab7a6920247170b"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">MuPDFCore.Rectangle.Y0</a></div><div class="ttdeci">float Y0</div><div class="ttdoc">The top coordinate of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00336">Rectangles.cs:336</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a69c99f6aaf6cfa3ca52a9aab45fb06a0"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a69c99f6aaf6cfa3ca52a9aab45fb06a0">MuPDFCore.Rectangle.X1</a></div><div class="ttdeci">float X1</div><div class="ttdoc">The right coordinate of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00341">Rectangles.cs:341</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a7cc750e4547b99f89a6427ab86b99fb3"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">MuPDFCore.Rectangle.X0</a></div><div class="ttdeci">float X0</div><div class="ttdoc">The left coordinate of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00331">Rectangles.cs:331</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_aca202ae10d09cc9307a57e3c8f206bed"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#aca202ae10d09cc9307a57e3c8f206bed">MuPDFCore.Rectangle.Y1</a></div><div class="ttdeci">float Y1</div><div class="ttdoc">The bottom coordinate of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00346">Rectangles.cs:346</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_adbdaf8ee995b42c7c710d32c74f65f5f"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#adbdaf8ee995b42c7c710d32c74f65f5f">MuPDFCore.Rectangle.Split</a></div><div class="ttdeci">Rectangle[] Split(int divisions)</div><div class="ttdoc">Split the rectangle into the specified number of Rectangles.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00422">Rectangles.cs:422</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_rectangle_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">MuPDFCore.RoundedRectangle</a></div><div class="ttdoc">Represents a rectangle using only integer numbers.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00494">Rectangles.cs:495</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_rectangle_html_a29904ab0820872c48e43631ece9f1fff"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">MuPDFCore.RoundedRectangle.Width</a></div><div class="ttdeci">int Width</div><div class="ttdoc">The width of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00519">Rectangles.cs:519</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_rectangle_html_a73d75f9e5e23910ee0a4078eec4980c9"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">MuPDFCore.RoundedRectangle.Height</a></div><div class="ttdeci">int Height</div><div class="ttdoc">The height of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00524">Rectangles.cs:524</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html">MuPDFCore.RoundedSize</a></div><div class="ttdoc">Represents the size of a rectangle using only integer numbers.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00181">Rectangles.cs:182</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html_a0c85da598b26dbd5bb66e60af22190de"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html#a0c85da598b26dbd5bb66e60af22190de">MuPDFCore.RoundedSize.Height</a></div><div class="ttdeci">int Height</div><div class="ttdoc">The height of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00191">Rectangles.cs:191</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html_a5e5954ae76c12cb8a36572be2354aa4b"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html#a5e5954ae76c12cb8a36572be2354aa4b">MuPDFCore.RoundedSize.Width</a></div><div class="ttdeci">int Width</div><div class="ttdoc">The width of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00186">Rectangles.cs:186</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html_a8703250753e43f5556408d3074e695bb"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html#a8703250753e43f5556408d3074e695bb">MuPDFCore.RoundedSize.Split</a></div><div class="ttdeci">RoundedRectangle[] Split(int divisions)</div><div class="ttdoc">Split the size into the specified number of RoundedRectangles.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00209">Rectangles.cs:209</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_d84f90bba075742c2a9090e1ba7aabcd.html">MuPDFCore</a></li><li class="navelem"><b>MuPDFMultiThreadedPageRenderer.cs</b></li>
    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
  </ul>
</div>
</body>
</html>
